﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DDD.Core {

    /// <summary>
    /// フィードバック変数をあらわす構造体
    /// </summary>
    /// <remarks>
    /// <see cref="FeebackVariable"/> は頂点トランスフォームで使用されるフィードバック変数を表します。
    /// 頂点フィードバックの詳細については、<see cref="FeedbackBuffer"/> クラスの解説を参照してください。
    /// フィードバック変数は、<c>Varyging</c> 変数とそのデータを収納する <see cref="VertexArray"/> の組みからなる構造体です。
    /// この構造体はユーザーが直接インスタンス化する事はできず、かならずエンジン側から戻り値で受け取ります。
    /// <note type="implement">
    /// フィードバック変数のポストコピーは廃止された。
    /// 使用しないように！！
    /// </note>
    /// </remarks>
    /// <seealso cref="FeedbackBuffer"/>
    public struct FeedbackVariable {
        /// <summary>
        /// コンストラクター
        /// </summary>
        /// <param name="name">フィードバックする <c>Varying</c> 変数名</param>
        /// <param name="varry">頂点アレイ</param>
        /// <param name="postCopy">ポストコピー(null可)（使用不可）</param>
        internal FeedbackVariable (string name, VertexArray varry, VertexArray postCopy)
            : this () {
            this.Name = name;
            this.VertexArray = varry;
            this.CopyTo = postCopy;
        }

        /// <summary>
        /// <c>Varying</c> 変数名
        /// </summary>
        /// <remarks>
        /// フィードバックする <c>Varying</c> 変数名です。
        /// </remarks>
        public string Name { get; private set; }

        /// <summary>
        /// 頂点アレイ
        /// </summary>
        /// <remarks>
        /// フィードバックしたデータを格納する <see cref="VertexArray">頂点アレイ</see> です。
        /// </remarks>
        public VertexArray VertexArray { get; private set; }

        /// <summary>
        /// コピー先のVertexArray
        /// </summary>
        /// <remarks>
        /// ポストコピーは廃止された。使用してはいけない。
        /// </remarks>
        public VertexArray CopyTo { get; private set; }


        /// <inheritdoc/>
        public override string ToString () {
            return string.Format ("FeedbackVariable:");
        }

    }
}
